package org.jsola.hr.provider;

import org.jsola.hr.dto.EmpTicketDTO;
import org.jsola.hr.dto.PhoneVerificationCodeDTO;
import org.jsola.hr.dto.WeChatBindFromOffAccountDTO;
import org.jsola.hr.entity.EmpInfoDO;
import org.jsola.hr.vo.EmpAllInfoVO;
import org.jsola.hr.vo.EmpLoginResultVO;

/**
 * @author JanusMix
 */
public interface IHrEmpInfoRelationService {

    /**
     * 生成ticket
     * @param empTicketDTO
     * @return UserLoginVO
     */
    String genTicket(EmpTicketDTO empTicketDTO);

    /**
     * 发送短信验证码
     * @param phone
     * @return Boolean
     */
    Boolean hrSendShortMessage(String phone);


    /**
     * @param phone
     * @param host
     * @return
     */
    Boolean hrSendShortMessage(String phone, String host);

    /**
     * @param phone
     * @param deviceType
     * @return
     */
    Boolean hrSendShortMessageByDeviceType(String phone, String deviceType);

    /**
     * 短信验证码校验
     * @param phoneVerificationCodeDTO 手机号、验证码
     * @return UserLoginVO
     */
    EmpAllInfoVO verificationCodeLogin(PhoneVerificationCodeDTO phoneVerificationCodeDTO);

    /**
     * 短信验证码校验（微信小程序登录）
     * @param phoneVerificationCodeDTO 手机号、验证码、ticket
     * @return UserLoginVO
     */
    EmpLoginResultVO verificationCodeLoginWeChat(PhoneVerificationCodeDTO phoneVerificationCodeDTO);

    /**
     * 短信验证码校验（微信小程序登录 根据devicetype查询配置信息）
     * @param phoneVerificationCodeDTO 手机号、验证码
     * @return UserLoginVO
     */
    EmpLoginResultVO verificationCodeLoginWeChatByDevicetype(PhoneVerificationCodeDTO phoneVerificationCodeDTO);
    
    /**
     * 短信验证码校验（小程序管理端登录）
     * @param phoneVerificationCodeDTO 手机号、验证码、ticket
     * @return UserLoginVO
     */
    EmpLoginResultVO verificationCodeLoginWeChatForAdmin(PhoneVerificationCodeDTO phoneVerificationCodeDTO);

    /**
     * 微信小程序验证码校验（没有业务逻辑） 根据devicetype查询配置信息）
     * @param phoneVerificationCodeDTO 手机号、验证码
     * @return UserLoginVO
     */
    String verificationCodeLoginWeChatByDevicetypeNoLogic(PhoneVerificationCodeDTO phoneVerificationCodeDTO);

    /**
     * 根据unionId获取员工
     * @param unionId 微信unionId
     * @return EmpInfoDO
     */
    EmpInfoDO checkEmpUnionIdBind(String unionId);

    /**
     * 公众号绑定手机号验证码校验
     * @param phoneVerificationCodeDTO 手机号验证码ticketDTO
     * @return EmpAllInfoVO
     */
    Boolean hrVerificationCodeOfficialAccount(PhoneVerificationCodeDTO phoneVerificationCodeDTO);

    /**
     * 校验手机号是否绑定过微信
     * @param weChatBindFromOffAccountDTO 公众号跳转小程序绑定微信的参数
     * @return EmpAllInfoVO
     */
    Boolean checkPhoneBind(WeChatBindFromOffAccountDTO weChatBindFromOffAccountDTO);
}
